
    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>如何在 Dubbo 中实现分布式事务？ - 学习卡片</title>
      <style>
        body { font-family: sans-serif; background-color: #f0f8ff; color: #333; display: flex; flex-direction: column; align-items: center; padding: 50px 20px; }
        .header h1 { font-size: 32px; }
        .grid-container { display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; width: 100%; max-width: 1200px; }
        .card-container { perspective: 1200px; cursor: pointer; height: 250px; }
        .card { width: 100%; height: 100%; position: relative; transform-style: preserve-3d; transition: transform 0.7s; border-radius: 16px; box-shadow: 0 4px 16px rgba(0,0,0,0.08); }
        .card-container.flipped .card { transform: rotateY(180deg); }
        .card-face { position: absolute; width: 100%; height: 100%; backface-visibility: hidden; display: flex; flex-direction: column; box-sizing: border-box; border-radius: 16px; background-color: #fff; padding: 24px; }
        .card-back { background-color: #f0fff4; transform: rotateY(180deg); justify-content: space-between; }
        .card-category { font-size: 14px; color: #0052d9; margin-bottom: 8px; font-weight: 500; }
        .card-question { font-size: 20px; font-weight: 500; flex-grow: 1; display: flex; align-items: center; justify-content: center; text-align: center; }
        .card-answer-wrapper { flex-grow: 1; overflow-y: auto; }
        .card-answer { font-size: 15px; line-height: 1.7; }
        .card-footer { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 16px; margin-top: 16px; }
        .card-source { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 12px; margin-top: 12px; }
      </style>
    </head>
    <body>
      <div class="header">
        <h1>如何在 Dubbo 中实现分布式事务？ - 学习卡片</h1>
      </div>
      <div class="grid-container">
        
    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">基础</div>
          <div class="card-question">升级到 Spring Framework 6.0 和 Spring Boot 3.0 对 Java 和 Jakarta EE 的版本有什么最低要求？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">基础</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">Spring Framework 6.0 和 Spring Boot 3.0 要求 Java 17 作为最低版本，并且迁移到了 Jakarta EE 9 作为基准，同时兼容最新的 Jakarta EE 10。</div>
          </div>
          <div class="card-source">来源: 基础要求</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">特性</div>
          <div class="card-question">Spring 6 引入的 AOT（Ahead-of-Time）编译支持旨在解决什么问题，并带来哪些核心优势？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">特性</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">AOT 编译的主要目标是为 GraalVM 原生镜像（Native Image）提供一流的支持。其核心优势包括：近乎即时的启动速度、更低的内存消耗以及更小的部署包体积，特别适合云原生和 Serverless 场景。</div>
          </div>
          <div class="card-source">来源: 核心特性 - AOT 编译支持</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">在 Maven 项目中，如何使用 Spring Boot 3 的新机制来生成 AOT 所需的源代码，以便后续构建原生镜像？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">可以通过运行 `mvn spring-boot:process-aot` 命令来触发 `spring-aot-maven-plugin` 插件。该插件会分析应用程序，并生成原生镜像编译所需的源代码、元数据和类文件。</div>
          </div>
          <div class="card-source">来源: 核心特性 - AOT 编译支持</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">特性</div>
          <div class="card-question">Spring Boot 3.0 如何实验性地支持 Java 的虚拟线程（Project Loom）？如何启用它？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">特性</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">Spring Boot 3.0 提供了对虚拟线程的实验性支持。通过在 `application.properties` 中设置 `spring.threads.virtual.enabled=true`，可以使 Spring MVC 为每个请求使用一个虚拟线程来处理，从而用少量系统线程应对大量并发请求。</div>
          </div>
          <div class="card-source">来源: 核心特性 - 虚拟线程支持 (Project Loom)</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">Spring Boot 3.0 在可观测性（Observability）方面引入了什么新的抽象？它整合了哪些关键项目来实现指标和追踪的统一？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">Spring Boot 3.0 引入了一个新的可观测性抽象，其背后是 Micrometer 项目。为了统一指标和追踪，它集成了新的 Micrometer Tracing 项目（该项目整合了原 Spring Cloud Sleuth 的功能）。</div>
          </div>
          <div class="card-source">来源: 核心特性 - 可观测性的新方法</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">特性</div>
          <div class="card-question">Spring Boot 3.0 如何支持 RFC 7807 Problem Details 规范来标准化 API 错误响应？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">特性</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">当请求一个产生错误的 Spring MVC 控制器端点时，Spring Boot 3.0 会默认返回一个 `Content-Type` 为 `application/problem+json` 的响应。响应体内容是一个 `ProblemDetail` 对象，该对象格式遵循 RFC 7807 规范，从而实现了标准化的错误信息传递。</div>
          </div>
          <div class="card-source">来源: 核心特性 - RFC 7807 问题详情支持</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">模式</div>
          <div class="card-question">Spring Framework 6 引入了哪种新的声明式 HTTP 客户端技术？请描述其工作原理。</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">模式</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">Spring Framework 6 引入了基于 `@HttpExchange` 注解的声明式 HTTP 客户端。开发者只需创建一个 Java 接口，并使用 `@HttpExchange` 等注解来描述远程 HTTP 服务，Spring 就会自动为该接口生成实现类，从而简化了远程调用的代码编写，其工作模式类似于 Feign 或 Retrofit。</div>
          </div>
          <div class="card-source">来源: 核心特性 - 声明式 HTTP 客户端</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">依赖</div>
          <div class="card-question">除了框架本身，Spring Boot 3.0 还对哪些第三方核心依赖进行了重要的主版本升级？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">依赖</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">Spring Boot 3.0 将许多核心依赖升级到了新的主版本，包括 Hibernate 6.1, Flyway 9, R2DBC 1.0, 和 Redis lettuce 6.2 等。</div>
          </div>
          <div class="card-source">来源: 依赖项升级</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">配置</div>
          <div class="card-question">在 Spring Boot 3.0 中，MongoDB 的连接配置属性发生了什么重要变化？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">配置</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">在 Spring Boot 3.0 中，用于分别配置主机、端口、用户名和密码的 MongoDB 属性已被废弃。现在推荐使用单一的 `spring.data.mongodb.uri` 属性来通过连接字符串统一配置所有连接信息。</div>
          </div>
          <div class="card-source">来源: 配置变化</div>
        </div>
      </div>
    </div>

      </div>
    </body>
    </html>
